package com.alinesno.cloud.base.boot.service;

import java.util.Set;

import org.springframework.data.domain.Page;
import org.springframework.data.repository.NoRepositoryBean;

import com.alinesno.cloud.base.boot.entity.ManagerAccountEntity;
import com.alinesno.cloud.common.facade.services.IBaseService;
import com.alinesno.cloud.common.facade.wrapper.RestWrapper;

/**
 * <p>  服务类 </p>
 *
 * @author WeiXiaoJin
 * @since 2018-12-16 17:53:19
 */
@NoRepositoryBean
public interface IManagerAccountService extends IBaseService< ManagerAccountEntity, String> {
	
	/**
	 * 通过用户名查询用户信息
	 * @return
	 */
	ManagerAccountEntity findByLoginName(String loginName);

	/**
	 * 重置用户密码
	 * @param id
	 * @param newPassword
	 * @param oldPassword
	 * @return
	 */
	boolean resetPassword(String id, String newPassword, String oldPassword);

	/**
	 * 注册用户
	 * @param loginName 邮箱 
	 * @param password 密码
	 * @param phoneCode 验证码
	 * @return
	 */
	boolean registAccount(String loginName, String password, String phoneCode);

	/**
	 * 判断用户是否有超级管理员
	 * @param dto
	 * @return
	 */
	boolean isAdmin(ManagerAccountEntity dto);

	/**
	 * 获取所有角色值 ，用于后期用户权限权限判断
	 * @param dto
	 * @return
	 */
	Set<String> findRoles(ManagerAccountEntity dto);

	/**
	 * 获取用户权限
	 * @param dto
	 * @return
	 */
	Set<String> findPermissions(ManagerAccountEntity dto);

	/**
	 * 更新头像路径 
	 * @param path 
	 * @param id
	 */
	void updateAvator(String path , String id);

	/**
	 * 验证是否为唯一邮箱
	 * @param email 
	 * @param userId
	 * @return 是true|不是false
	 */
	boolean checkEmailUnique(String email, String userId);

	/**
	 * 验证是否为唯一手机号
	 * @param phone
	 * @param userId
	 * @return 是true|不是false
	 */
	boolean checkPhoneUnique(String phone, String userId);

	/**
	 * 根据用户所在角色分页查询
	 * @param roleId
	 * @return
	 */
	Page<ManagerAccountEntity> findRoleMemberPage(String roleId , RestWrapper restWrapper);

}
